package com.zxhysy.log.annotation.context;

import org.springframework.context.expression.MethodBasedEvaluationContext;
import org.springframework.core.ParameterNameDiscoverer;

import java.lang.reflect.Method;
import java.util.Map;

/**
 * 将用户自定义的参数设置进取
 * 把方法的参数都放到 SpEL 解析的 RootObject 中
 * 把 LogRecordContext 中的变量都放到 RootObject 中
 * @author zhangxinhong
 * @since 2022/1/24 15:57
 */
public class LogEvaluationContext extends MethodBasedEvaluationContext {

    /**
     * 表达式内容注入
     * @param rootObject rootObject
     */
    public LogEvaluationContext(Object rootObject, Method method, Object[] arguments,
                                ParameterNameDiscoverer parameterNameDiscoverer) {
        // 把方法的参数都放到 SpEL 解析的 RootObject 中
        super(rootObject, method, arguments, parameterNameDiscoverer);
        // 把 LogRecordContext 中的变量都放到 RootObject 中
        Map<String, Object> variables = LogContext.getVariables();
        if (variables != null && variables.size() > 0) {
            for (Map.Entry<String, Object> entry : variables.entrySet()) {
                setVariable(entry.getKey(), entry.getValue());
            }
        }
    }
}
